#ifndef GUIMAP_H_
#define GUIMAP_H_

#include "map/Map.h"
#include "map/Intersection.h"
#include "map/RoadSegment.h"
#include "gui/objects/GUIObject.h"
#include "gui/objects/GUIObjectFactory.h"
#include "util/LinkedList.h"

namespace gui {

class GUIMap {
public:
	GUIMap(Map* map);

	virtual ~GUIMap();

	virtual int getTotalHeight();

	virtual int getTotalWidth();

	virtual int getTopLimit();

	virtual int getLeftLimit();

	virtual util::LinkedList<GUIObject*>* getGUIObjects();

	virtual void addGUIBaseSegment(RoadSegment* roadSegment);

	virtual void addGUIIntersection(Intersection* intersection, RoadType type);

	virtual void addGUIRoadSegment(RoadSegment* roadSegment);

	virtual void addGUIRoadArrow(RoadSegment* roadSegment);

	virtual void addGUIRoadArrow(RoadSegment* roadSegment, bool inverted);

	virtual void addGUIRouteIntersection(Intersection* intersection);

	virtual void addGUIRouteSegment(Intersection* origin, Intersection* destination);

	virtual void addGUIRouteArrow(Intersection* origin, Intersection* destination);

	virtual void addGUIMapLocation(MapLocation* mapLocation);

	// Expongo el mapa por comodidad mientras hago refactor
	virtual Map* getMap() { return this->map; }
private:
	Map* map;
	GUIObjectFactory* factory;
	util::LinkedList<GUIObject*>* guiObjects;
};

}

#endif /* GUIMAP_H_ */
